Subject: Handling SDLC

From: "Steve Klein" <[email-masked]>
Date: Wed, 22 Jun 94 18:51:34 EDT

This note is intended to get the SDLC discussion moving again.  I've
looked over past notes on the subject and have developed a proposal
that, I feel, handles SDLC with minimal impact to the FSMs (actually
simplifying them), gives implementers some guidance in supporting SDLC,
and gives flexibility to the implementer to implement SDLC in the
manner that they feel is best.

You can post your comments now or wait until the AIW next week.

Steve

First I present the two basic bringup flows from a pure FSM perspective.
The first flow is a bringup involving XIDs and the second is one without
XIDs.  The areas marked with 'See Note' indicate changes to the FSMs
in fsm-dlsw-01.txt.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Flow #1 - DLSw Bringup With XIDs

   ======                            ___                           ======
   |    |        ---------        __/   \__       ---------        |    |
   |    |      __|  _|_  |__     /   IP    \    __|  _|_  |__      |    |
   ======        |   |   |      <  Network  >     |   |   |        ======
  /______\       ---------       \__     __/      ---------       /______\
   Origin       Origin DLSw         \___/        Target DLSw      Target
   Station        partner                          partner        Station

                disconnected                    disconnected

                DLC_RESOLVE_C   CANUREACH_ex
                ----------->    ----------->

                                  ICANREACH_ex
                                  <-----------

                DLC_XID         CANUREACH_cs    DLC_START_DL
                ----------->    ----------->    ----------->
                circuit_start                   resolve_pending

                                  ICANREACH_cs    DLC_DL_STARTED
                                  <-----------    <-----------
            circuit_established                 circuit_pending
                                REACH_ACK
                                ----------->   circuit_established

                                XIDFRAME        DLC_XID
  See Note 1                    ----------->    ----------->

                       DLC_XID        XIDFRAME         DLC_XID
                  <-----------    <-----------    <-----------

                DLC_XID         XIDFRAME        DLC_XID
                ----------->    ----------->    ----------->

                   DLC_XIDs       XIDFRAMEs        DLC_XIDs
                <------------>  <------------>  <------------>

                DLC_CONTACTED   CONTACT         DLC_CONTACT
                ----------->    ----------->    ----------->
                connect_pending                 contact_pending

                   DLC_CONTACT       CONTACTED    DLC_CONTACTED
  See Note 2      <-----------    <-----------    <-----------
                   connected                       connected

                  DLC_INFOs        IFRAMEs        DLC_INFOs
                <------------>  <------------>  <------------>

Note 1: The XIDFRAME is generated due to the fact the circuit was
        started by a DLC_XID event, not another DLC_XID event.
Note 2: There would always be a DLC_CONTACT action when receiving a
        CONTACTED message, instead of there being a
        DLC_EXIT_BUSY/DLC_CONTACT choice depending on whether there
        was a immediate response to the SABME at DLC_CONTACTED time.
-------------------------------------------------------------------------
Mapping LAN events to the DLC events and actions on Flow #1 produces:

   ======                            ___                           ======
   |    |        ---------        __/   \__       ---------        |    |
   |    |      __|  _|_  |__     /   IP    \    __|  _|_  |__      |    |
   ======        |   |   |      <  Network  >     |   |   |        ======
  /______\       ---------       \__     __/      ---------       /______\
   Origin       Origin DLSw         \___/        Target DLSw      Target
   Station        partner                          partner        Station

                disconnected                    disconnected

TEST_cmd        DLC_RESOLVE_C   CANUREACH_ex                    TEST_cmd
----------->    ----------->    ----------->                    ---------->

      TEST_rsp                    ICANREACH_ex                        TEST_rsp
  <-----------                    <-----------                    <-----------

null XID        DLC_XID         CANUREACH_cs    DLC_START_DL
----------->    ----------->    ----------->    ----------->
                circuit_start                   resolve_pending

                                  ICANREACH_cs    DLC_DL_STARTED
                                  <-----------    <-----------
            circuit_established                 circuit_pending
                                REACH_ACK
                                ----------->   circuit_established

                                XIDFRAME        DLC_XID         null XID
                                ----------->    ----------->    ---------->

          XID          DLC_XID        XIDFRAME         DLC_XID             XID
  <-----------    <-----------    <-----------    <-----------    <-----------

    XIDs           DLC_XIDs       XIDFRAMEs        DLC_XIDs          XIDs
<------------>  <------------>  <------------>  <------------>  <------------>

SABME           DLC_CONTACTED   CONTACT         DLC_CONTACT     SABME
----------->    ----------->    ----------->    ----------->    ----------->
                connect_pending                 contact_pending

            UA     DLC_CONTACT       CONTACTED    DLC_CONTACTED             UA
  <-----------    <-----------    <-----------    <-----------    <-----------
                  connected                        connected

   IFRAMEs        DLC_INFOs        IFRAMEs        DLC_INFOs        IFRAMEs
<------------>  <------------>  <------------>  <------------>  <------------>
-------------------------------------------------------------------------
Those implementations that prefer to respond to the SABME immediately
could use the same events to do that:

SABME           DLC_CONTACTED   CONTACT         DLC_CONTACT     SABME
----------->    ----------->    ----------->    ----------->    ----------->
           UA   connect_pending                 contact_pending
  <-----------
RR
----------->
          RNR
  <-----------

            RR     DLC_CONTACT       CONTACTED    DLC_CONTACTED             UA
  <-----------    <-----------    <-----------    <-----------    <-----------
                  connected                        connected

   IFRAMEs        DLC_INFOs        IFRAMEs        DLC_INFOs        IFRAMEs
<------------>  <------------>  <------------>  <------------>  <------------>
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Flow #2 - DLSw Bringup Without XIDs (circuit setup)

   ======                            ___                           ======
   |    |        ---------        __/   \__       ---------        |    |
   |    |      __|  _|_  |__     /   IP    \    __|  _|_  |__      |    |
   ======        |   |   |      <  Network  >     |   |   |        ======
  /______\       ---------       \__     __/      ---------       /______\
   Origin       Origin DLSw         \___/        Target DLSw      Target
   Station        partner                          partner        Station

                disconnected                    disconnected

                DLC_CONTACTED   CANUREACH_cs    DLC_START_DL
                ----------->    ----------->    ----------->
                circuit_start                   resolve_pending

                                  ICANREACH_cs    DLC_DL_STARTED
                                  <-----------    <-----------
            circuit_established                 circuit_pending
                                REACH_ACK
                                ----------->   circuit_established

                                CONTACT         DLC_CONTACT
                                ----------->    ----------->
                connect_pending                 contact_pending

                   DLC_CONTACT       CONTACTED    DLC_CONTACTED
See Note 2 above  <-----------    <-----------    <-----------
                   connected                       connected

                  DLC_INFOs        IFRAMEs        DLC_INFOs
                <------------>  <------------>  <------------>
-------------------------------------------------------------------------
Mapping LAN events to the DLC events and actions on Flow #2 (and
adding a NETBIOS_NQ and NETBIOS_NR_ex) produces:

   ======                            ___                           ======
   |    |        ---------        __/   \__       ---------        |    |
   |    |      __|  _|_  |__     /   IP    \    __|  _|_  |__      |    |
   ======        |   |   |      <  Network  >     |   |   |        ======
  /______\       ---------       \__     __/      ---------       /______\
   Origin       Origin DLSw         \___/        Target DLSw      Target
   Station        partner                          partner        Station

                disconnected                     disconnected

NAME_QUERY      DLC_DGRM        NETBIOS_NQ_ex   DLC_DGRM        NAME_QUERY
----------->    ----------->    ----------->    ----------->    ----------->

    NAME_RECOG         DLC_DGRM   NETBIOS_NR_ex       DLC_DGRM      NAME_RECOG
  <-----------    <------------   <-----------    <-----------    <-----------

SABME           DLC_CONTACTED   CANUREACH_cs    DLC_START_DL
----------->    ----------->    ----------->    ----------->
                circuit_start                   resolve_pending

                                  ICANREACH_cs    DLC_DL_STARTED
                                  <-----------    <-----------
            circuit_established                 circuit_pending
                                REACH_ACK
                                ----------->   circuit_established

                                CONTACT         DLC_CONTACT     SABME
                                ----------->    ----------->    ----------->
                connect_pending                 contact_pending

            UA     DLC_CONTACT       CONTACTED    DLC_CONTACTED             UA
  <-----------    <-----------    <-----------    <-----------    <-----------
                   connected                       connected

   IFRAMEs        DLC_INFOs        IFRAMEs        DLC_INFOs        IFRAMEs
<------------>  <------------>  <------------>  <------------>  <------------>
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
In keeping with a paradigm of 'DLSw is a big 802.2 LAN', all other DLC
DLC types (SDLC for now ... QLLC, channel, or whatever in the future)
would be handled by a 'DLC transformation layer' that would transform
the specific protocol's events into the appropriate DLSw DLC events and
DLSw DLC actions into the appropriate protocol actions.  The XIDs that
flow in the SSP XIDFRAME should stay 802.2ish (ie. ABM bit set) and
leave it up to the DLC transformation layer to suit the XID to its
particular DLC type.

Here is an example of a leased SDLC PU 2.0 device as the origin station.
It should use Flow #2 since it is not known if the other side is a LAN,
a switched line or a leased line.

   ======                            ___                           ======
   |    |        ---------        __/   \__       ---------        |    |
   |    |      __|  _|_  |__     /   IP    \    __|  _|_  |__      |    |
   ======        |   |   |      <  Network  >     |   |   |        ======
  /______\       ---------       \__     __/      ---------       /______\
   Origin       Origin DLSw         \___/        Target DLSw      Target
   Station        partner                          partner        Station

                disconnected                     disconnected

implementer's   DLC_RESOLVE_C   CANUREACH_ex
choice (power   ----------->    ----------->
up, configuration
change, never,                    ICANREACH_ex
connect time, etc.)               <-----------

PU 2.0 is
configured
in DLSw to      DLC_XID(null)   CANUREACH_cs    DLC_START_DL
call in         ----------->    ----------->    ----------->
                circuit_start                   resolve_pending

                                  ICANREACH_cs    DLC_DL_STARTED
                                  <-----------    <-----------
            circuit_established                 circuit_pending
                                REACH_ACK
                                ----------->   circuit_established

                                XIDFRAME        DLC_XID
                                ----------->    ----------->

                       DLC_XID        XIDFRAME         DLC_XID
respond with      <-----------    <-----------    <-----------
XID configured
for station or
forward XID to
station and
send response   DLC_XID         XIDFRAME        DLC_XID
                ----------->    ----------->    ----------->

          SNRM     DLC_CONTACT       CONTACTED    DLC_CONTACTED
  <-----------    <-----------    <-----------    <-----------
                contact_pending                 connect_pending

UA              DLC_CONTACTED   CONTACT         DLC_CONTACT
----------->    ----------->    ----------->    ----------->
                   connected                       connected

   IFRAMEs        DLC_INFOs        IFRAMEs        DLC_INFOs
<----------->   <------------>  <------------>  <------------>
--------------------------------------------------------------------------
Here is an example of a switched SDLC PU 2.0 device as the origin station.

   ======                            ___                           ======
   |    |        ---------        __/   \__       ---------        |    |
   |    |      __|  _|_  |__     /   IP    \    __|  _|_  |__      |    |
   ======        |   |   |      <  Network  >     |   |   |        ======
  /______\       ---------       \__     __/      ---------       /______\
   Origin       Origin DLSw         \___/        Target DLSw      Target
   Station        partner                          partner        Station

                disconnected                     disconnected

implementer's   DLC_RESOLVE_C   CANUREACH_ex
choice (power   ----------->    ----------->
up, configuration
change, receipt                   ICANREACH_ex
of XID, never, etc.)              <-----------

XID(null)       DLC_XID(null)   CANUREACH_cs    DLC_START_DL
----------->    ----------->    ----------->    ----------->
                circuit_start                   resolve_pending

                                  ICANREACH_cs    DLC_DL_STARTED
                                  <-----------    <-----------
            circuit_established                 circuit_pending
                                REACH_ACK
                                ----------->   circuit_established

                                XIDFRAME        DLC_XID
                                ----------->    ----------->

           XID         DLC_XID        XIDFRAME         DLC_XID
  <-----------    <-----------    <-----------    <-----------

XID             DLC_XID         XIDFRAME        DLC_XID
----------->    ----------->    ----------->    ----------->

          SNRM     DLC_CONTACT       CONTACTED    DLC_CONTACTED
  <-----------    <-----------    <-----------    <-----------
                contact_pending                 connect_pending

UA              DLC_CONTACTED   CONTACT         DLC_CONTACT
----------->    ----------->    ----------->    ----------->
                   connected                       connected

   IFRAMEs        DLC_INFOs        IFRAMEs        DLC_INFOs
<------------>  <------------>  <------------>  <------------>
--------------------------------------------------------------------------
Here is an example of a leased SDLC PU 2.0 device as the target station.

   ======                            ___                           ======
   |    |        ---------        __/   \__       ---------        |    |
   |    |      __|  _|_  |__     /   IP    \    __|  _|_  |__      |    |
   ======        |   |   |      <  Network  >     |   |   |        ======
  /______\       ---------       \__     __/      ---------       /______\
   Origin       Origin DLSw         \___/        Target DLSw       Target
   Station        partner                          partner         Station
                                                                   (SDLC)
                disconnected                    disconnected

                DLC_RESOLVE_C   CANUREACH_ex
                ----------->    ----------->    reply if virtual MAC
                                                for SDLC station is
                                                configured, if SDLC
                                                station responds to
                                  ICANREACH_ex  TEST/SNRM/DISC, etc.
                                  <-----------

                DLC_XID         CANUREACH_cs    DLC_START_DL    SNRM
                ----------->    ----------->    ----------->    ----------->
                circuit_start                   resolve_pending

                                  ICANREACH_cs    DLC_DL_STARTED            UA
                                  <-----------    <-----------    <-----------
            circuit_established                 circuit_pending
                                                                RNR
                                REACH_ACK                       ----------->
                                ----------->   circuit_established

                                XIDFRAME        DLC_XID
                                ----------->    ----------->    respond with
                                                                XID configured
                                                                for station or
                                                                forward XID to
                                                                station and
                       DLC_XID        XIDFRAME         DLC_XID  send response
                  <-----------    <-----------    <-----------

                DLC_CONTACTED   CONTACT         DLC_CONTACT     RR
                ----------->    ----------->    ----------->    ----------->
                connect_pending                contact_pending

                   DLC_CONTACT       CONTACTED    DLC_CONTACTED
                  <-----------    <-----------    <-----------
                  connected                        connected

                  DLC_INFOs        IFRAMEs        DLC_INFOs        IFRAMEs
                <------------>  <------------>  <------------>  <------------>
--------------------------------------------------------------------------
Here is an example of a switched SDLC PU 2.0 device as the target station.

   ======                            ___                           ======
   |    |        ---------        __/   \__       ---------        |    |
   |    |      __|  _|_  |__     /   IP    \    __|  _|_  |__      |    |
   ======        |   |   |      <  Network  >     |   |   |        ======
  /______\       ---------       \__     __/      ---------       /______\
   Origin       Origin DLSw         \___/        Target DLSw       Target
   Station        partner                          partner         Station
                                                                   (SDLC)
                disconnected                    disconnected

                DLC_RESOLVE_C   CANUREACH_ex
                ----------->    ----------->    reply if virtual MAC
                                                for SDLC station is
                                                configured, if SDLC
                                                station responds to
                                  ICANREACH_ex  TEST/XID/SNRM/DISC, etc.
                                  <-----------

                DLC_XID         CANUREACH_cs    DLC_START_DL    XID
                ----------->    ----------->    ----------->    ----------->
                circuit_start                   resolve_pending

                                  ICANREACH_cs    DLC_DL_STARTED           XID
                                  <-----------    <-----------    <-----------
            circuit_established                 circuit_pending
                                REACH_ACK
                                ----------->   circuit_established

                                XIDFRAME        DLC_XID
                                ----------->    ----------->    respond with
                                                                XID received
                       DLC_XID        XIDFRAME         DLC_XID  above
                  <-----------    <-----------    <-----------

                DLC_CONTACTED   CONTACT         DLC_CONTACT     SNRM
                ----------->    ----------->    ----------->    ----------->
                connect_pending                contact_pending

                   DLC_CONTACT       CONTACTED    DLC_CONTACTED             UA
                  <-----------    <-----------    <-----------    <-----------
                  connected                        connected

                  DLC_INFOs        IFRAMEs        DLC_INFOs        IFRAMEs
                <------------>  <------------>  <------------>  <------------>

--------------------------------------------------------------------------
Here is an example of an SDLC T2.1 device as the target station.
(SDLC T2.1 origin station would look just like the LAN T2.1 origin station)

   ======                            ___                           ======
   |    |        ---------        __/   \__       ---------        |    |
   |    |      __|  _|_  |__     /   IP    \    __|  _|_  |__      |    |
   ======        |   |   |      <  Network  >     |   |   |        ======
  /______\       ---------       \__     __/      ---------       /______\
   Origin       Origin DLSw         \___/        Target DLSw      Target
   Station        partner                          partner        Station

                disconnected                    disconnected

                DLC_RESOLVE_C   CANUREACH_ex
                ----------->    ----------->    implementers choice
                                                (virtual MAC configured,
                                                 check to see if station
                                                 is powered up using
                                  ICANREACH_ex   TEST/XID/DISC, etc.)
                                  <-----------

                DLC_XID         CANUREACH_cs    DLC_START_DL    null XID
                ----------->    ----------->    ----------->    ---------->
                circuit_start                   resolve_pending

                                  ICANREACH_cs    DLC_DL_STARTED           XID
                                  <-----------    <-----------    <-----------
            circuit_established                 circuit_pending
                                REACH_ACK
                                ----------->   circuit_established

                                XIDFRAME        DLC_XID
                                ----------->    ----------->    respond with
                                                                XID received
                       DLC_XID        XIDFRAME         DLC_XID  above
                  <-----------    <-----------    <-----------

                   DLC_XIDs       XIDFRAMEs        DLC_XIDs          XIDs
                <------------>  <------------>  <------------>  <------------>

                DLC_CONTACTED   CONTACT         DLC_CONTACT     SABME
                ----------->    ----------->    ----------->    ----------->
                connect_pending                 contact_pending

                   DLC_CONTACT       CONTACTED    DLC_CONTACTED             UA
                  <-----------    <-----------    <-----------    <-----------
                  connected                        connected

                  DLC_INFOs        IFRAMEs        DLC_INFOs        IFRAMEs
                <------------>  <------------>  <------------>  <------------>